A virtual machine (VM) is a software construct that appears to be hardware on which a guest operating system (OS) and applications can be installed. In an emulator implementation, the virtual machine is an emulator, simulating all of the hardware used by the guest operating system and applications. In para-virtualization, the virtual machine allows the guest operating system and applications to run on the host hardware, but requires that the guest operating system be modified to use a special API (application programming interface) to run on the virtual machine monitor. In machine-level or full virtualization, the virtual machine allows a guest operating system that is implemented for the underlying host processor to be run without modification.
In a para-virtualization or a machine-level virtualization implementation, a virtual machine monitor (VMM) is used to bind the virtual machine to the underlying host hardware. In some architectures, the virtual machine monitor runs directly on the host hardware, in a hypervisor configuration. In others, it runs as an application on the host operating system. In some architectures, a lightweight hypervisor is run between the host operating system and the host hardware that provides a calling interface for both the host operating system and the virtual machine monitors. In some architectures, a hypervisor uses the services of a host operating system for device and other support.
Users would like to move software and data between devices. One way to do this is to place the software and data inside a VM and put the VM and VMM software on a portable storage media (e.g., a Universal Serial Bus (USB) drive or other portable storage media), which can be removably coupled to the device. Conventional approaches, however, are directed to a single VMM, which can only run on one type of operating system (e.g., Windows® XP).
Additionally, operating-system or application-level virtualization, which generally virtualize at the operating-system API boundary, can be faster and less memory and CPU intensive than full virtual machine virtualization. However, operating-system or application-level virtualization are not as portable as they require a compatible operating system at the host being visited.